GskTransform: Normalize angles
authorTimm Bäder <mail@baedert.org>
Thu, 19 Dec 2019 11:29:33 +0000 (12:29 +0100)
committerTimm Bäder <mail@baedert.org>
Tue, 7 Jan 2020 16:27:17 +0000 (17:27 +0100)
Make sure all angles are in the [0..365) range

gsk/gsktransform.c

index 3ab7d1f3ec4394f0abb81322cfc6f88e26ef08fa..2f3003f6fec6120846f3a52bc603213eb46478fd 100644 (file)
@@ -785,6 +785,22 @@ static const GskTransformClass GSK_ROTATE_TRANSFORM_CLASS =
   gsk_rotate_transform_equal,
 };
 
+static inline float
+normalize_angle (float angle)
+{
+  float f;
+
+  if (angle >= 0 && angle < 360)
+    return angle;
+
+  f = angle - (360 * ((int)(angle / 360.0)));
+
+  if (f < 0)
+    f = 360 + f;
+
+  return f;
+}
+
 /**
  * gsk_transform_rotate:
  * @next: (allow-none) (transfer full): the next transform
@@ -815,7 +831,7 @@ gsk_transform_rotate (GskTransform *next,
                                 GSK_TRANSFORM_CATEGORY_2D,
                                 next);
 
-  result->angle = angle;
+  result->angle = normalize_angle (angle);
 
   return &result->parent;
 }
@@ -938,7 +954,7 @@ gsk_transform_rotate_3d (GskTransform          *next,
                                 GSK_TRANSFORM_CATEGORY_3D,
                                 next);
 
-  result->angle = angle;
+  result->angle = normalize_angle (angle);
   graphene_vec3_init_from_vec3 (&result->axis, axis);
 
   return &result->parent;